#include "task_test.h"
// rtos
#include "FreeRTOS.h"
// #include "event_groups.h"
// #include "semphr.h"
// #include "task.h"
#include "timers.h"
// lib
#include <string.h>
#include <stdlib.h>
#include "debug.h"
// bsp
#include "bsp_led_ctrl.h"
#include "msp_gpio.h"               // 测试任务使用
// app
#include "restart_info.h"

// 定时器句柄
TimerHandle_t test_timer_0;

// uint8_t  test_buf_0[30] = "U4 TX send\r\n";
uint8_t  test_buf_0[30] = "AT\r\n";
uint8_t  test_buf_1[30] = {0};
uint8_t  test_buf_2[30] = "test 2\r\n";

uint32_t PWM_val = 1000;

// void test_timer_0_Callback(TimerHandle_t get_info_timer)
// {
//     // uint32_t time_cnt = 0;
//     // if (time_cnt >= PWM_val)
//     // {
//     //     time_cnt = 0;
//     // }
//     // U4_4G_0_Toggle();
//     // U4_4G_1_Toggle();
// }

void delay_us(uint32_t nTimer)
{
	uint32_t i=0;
	for(i=0;i<nTimer;i++){
		__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();
        __NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();
        __NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();
		__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();
        __NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();
        __NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();
		__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();
	}
}

void App_Application_Test_0(void)
{
    while (1)
    {
        delay_us(1);
    }
}

void App_Application_Test(void)
{
    uint16_t time_cnt = 0;
    float bat_test_val = 0;
    float sol_test_val = 0;
    __DEBUG_RTOS_FREESIZE();
    
    // 创建软件定时器
    // 周期是1s(FreeRTOSConfig.h文件中，configTICK_RATE_HZ查看)，自重载，定时器ID为0。
    // reconnect_timer = xTimerCreate("RecTimer", 1000, pdTRUE, 0, Reconnect_Timer_Callback);
    // test_timer_0 = xTimerCreate("TestTimer0", 10, pdTRUE, 0, test_timer_0_Callback);
    // xTimerStart(test_timer_0, portMAX_DELAY);

    while (1)
    {
        #if UART2_USE_DMA
        memset(test_buf_1, 0, sizeof(test_buf_1));
        if (MSP_Uart2_Read(test_buf_1))
        {
            _DEBUG_PRINTF(DBG_STP, "Uart2 recv:[%s]\r\n", test_buf_1);
            // if (strstr((char *)test_buf_1, "AT+us=") == 0)
            // {
                // sscanf((char *)test_buf_1, "AT+us=%d.", PWM_val);
                // PWM_val = atoi((char *)test_buf_1);
                // _DEBUG_PRINTF(DBG_STP, "us=[%d]\r\n", PWM_val);
            // }
        }
        #endif
        if ( time_cnt++ > 100 )     // 每秒
        {
            time_cnt = 0;
            // MSP_Printf_Time();
            // Bsp_Printf_Time();
            __DEBUG_RTOS_FREESIZE();
            memset(test_buf_2, 0, sizeof(test_buf_2));
            vTaskDelay(10);
            #if UART2_USE_DMA
            Msp_Uart2_Write("DMA send test\r\n", strlen("DMA send test\r\n"));
            #endif
            _DEBUG_PRINTF(DBG_STP, "bat val:[%.2f]V, sol val:[%.2f]V\r\n", 
                                    bat_test_val, sol_test_val);
        }
        vTaskDelay(10);
    }
}


void App_Application_Test_2(void)
{
    // uint32_t time_cnt = 0;
    while (1)
    {
        vTaskDelay(10);
    }
}
